package com.qianfeng.smsplatform.strategy.service.impl;//
//                            _ooOoo_
//                           o8888888o
//                           88" . "88
//                           (| -_- |)
//                            O\ = /O
//                        ____/`---'\____
//                      .   ' \\| |// `.
//                       / \\||| : |||// \
//                     / _||||| -:- |||||- \
//                       | | \\\ - /// | |
//                     | \_| ''\---/'' | |
//                      \ .-\__ `-` ___/-. /
//                   ___`. .' /--.--\ `. . __
//                ."" '< `.___\_<|>_/___.' >'"".
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |
//                 \ \ `-. \_ __\ /__ _/ .-` / /
//         ======`-.____`-.___\_____/___.-`____.-'======
//                            `=---='
//
//         .............................................
//                  佛祖镇楼                  BUG辟易
//          佛曰:
//                  写字楼里写字间，写字间里程序员；
//                  程序人员写程序，又拿程序换酒钱。
//                  酒醒只在网上坐，酒醉还来网下眠；
//                  酒醉酒醒日复日，网上网下年复年。
//                  但愿老死电脑间，不愿鞠躬老板前；
//                  奔驰宝马贵者趣，公交自行程序员。
//


import com.qianfeng.smsplatform.common.constants.CacheConstants;
import com.qianfeng.smsplatform.common.constants.RabbitMqConsants;
import com.qianfeng.smsplatform.common.constants.StrategyConstants;
import com.qianfeng.smsplatform.common.model.Standard_Report;
import com.qianfeng.smsplatform.common.model.Standard_Submit;
import com.qianfeng.smsplatform.strategy.feign.RedisCacheFeign;
import com.qianfeng.smsplatform.strategy.mq.SendMq;
import com.qianfeng.smsplatform.strategy.service.FilterChain;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


/**
 * 黑名单过滤
 * Created by Mr.ycz on 2019/12/3 9:43
 */
@Service
public class SmsBlackFilter implements FilterChain {

    private static Integer REPORT_COUNT =0;
    @Autowired
    private RedisCacheFeign cacheFeign;
    @Autowired
    private SendMq sendMq;

    @Override
    public boolean dealMessage(Standard_Submit submit) {
        //是否是黑名单
        String isBlack = cacheFeign.getString(CacheConstants.CACHE_PREFIX_BLACK + submit.getDestMobile());
        if(isBlack != null && isBlack=="1"){
            //是黑名单，限制其消息发送，并把日志存入到ES中  防止阻塞，先发送到mq中
            sendMq.sendMq(RabbitMqConsants.TOPIC_SMS_SEND_LOG,submit);

            //如果同时是HTTP的发送方式就模拟出状态报告推送给客户
            if(submit.getSource()!=null && submit.getSource()==1){
                Standard_Report report = new Standard_Report();
                report.setErrorCode(StrategyConstants.STRATEGY_ERROR_BLACK);
                report.setClientID(submit.getClientID());
                report.setMobile(submit.getDestMobile());
                report.setMsgId(submit.getMsgid());
                //推送次数
                report.setSendCount(++REPORT_COUNT);
                report.setSrcID(submit.getSrcSequenceId());
                report.setState(2);
                //通过mq发送给用户
                sendMq.sendMq(RabbitMqConsants.TOPIC_PUSH_SMS_REPORT,report);
            }
            return false;
        }
        return true;
    }
}
